<!DOCTYPE html>
<title>Check that descendant style invalidation works with ::cue selectors.</title>
<script src="../media-controls.js"></script>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<style>
video::cue,
video::cue(c),
video::cue(i:past),
video::cue(.b:future) { background-color: red }

.cue video::cue,
.cuefunc video::cue(c),
.past video::cue(i:past),
.future video::cue(.b:future) { background-color: green }
</style>
<div id="ascendant">
    <video>
        <track src="captions-webvtt/invalidation.vtt" kind="captions" default>
    </video>
</div>
<script>
async_test(function(t) {
    var video = document.querySelector('video');
    video.src = "../content/test.ogv";
    video.onseeked = t.step_func_done(function() {
        var red = "rgb(255, 0, 0)";
        var green = "rgb(0, 128, 0)";

        var cueNode = textTrackCueElementByIndex(video, 0).firstChild;
        var iNode = cueNode.firstElementChild;
        var cNode = iNode.nextSibling.nextSibling;
        var bNode = cNode.nextSibling.nextSibling;

        assert_equals(getComputedStyle(cueNode).backgroundColor, red);
        ascendant.offsetTop;
        ascendant.classList.add("cue");
        if (window.internals)
            assert_equals(internals.updateStyleAndReturnAffectedElementCount(), 12);
        assert_equals(getComputedStyle(cueNode).backgroundColor, green);

        assert_equals(getComputedStyle(cNode).backgroundColor, red);
        ascendant.offsetTop;
        ascendant.classList.add("cuefunc");
        if (window.internals)
            assert_equals(internals.updateStyleAndReturnAffectedElementCount(), 1);
        assert_equals(getComputedStyle(cNode).backgroundColor, green);

        assert_equals(getComputedStyle(iNode).backgroundColor, red);
        ascendant.offsetTop;
        ascendant.classList.add("past");
        if (window.internals)
            assert_equals(internals.updateStyleAndReturnAffectedElementCount(), 1);
        assert_equals(getComputedStyle(iNode).backgroundColor, green);

        assert_equals(getComputedStyle(bNode).backgroundColor, red);
        ascendant.offsetTop;
        ascendant.classList.add("future");
        if (window.internals)
            assert_equals(internals.updateStyleAndReturnAffectedElementCount(), 1);
        assert_equals(getComputedStyle(bNode).backgroundColor, green);
    });
    video.currentTime = 0.1;
});
</script>
